"""
LeetCode 热题

给你一个整数数组 nums ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。

子数组是数组中的一个连续部分。
"""
from collections import deque, Counter

class Solution(object):
    def maxSubArray(self, nums):
        """
        找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。

        参数:
        nums: List[int]，整数数组。

        返回:
        int，具有最大和的连续子数组的和。
        """
        if not nums:
            return 0

        # 初始化当前最大和和全局最大和
        max_current = nums[0] #-2
        max_global = nums[0] #-2

        # 遍历数组
        for i in range(1, len(nums)):
            # 更新当前最大和
            max_current = max(nums[i], max_current + nums[i])
            # 更新全局最大和
            max_global = max(max_global, max_current)

        return max_global

if __name__ == '__main__':
    a = Solution()
    print(a.maxSubArray([-2, 1, -3, 4, -1, 2, 1, -5, 4]))  # 输出应为 6
    print(a.maxSubArray([1]))  # 输出应为 1
    print(a.maxSubArray([5, 4, -1, 7, 8]))  # 输出应为 23
    print(a.maxSubArray([a]))  # 输出应为 a

